From 79de2d31f1ff8910231b7ec15519405953e6571a Mon Sep 17 00:00:00 2001 From: Wei Liu Date: Fri, 28 Feb 2014 17:35:15 +0100 Subject: [PATCH] mm: ensure useful progress in decrease_reservation During my fun time playing with balloon driver I found that hypervisor's preemption check kept decrease_reservation from doing any useful work for 32 bit guests, resulting in hanging the guests. As Andrew suggested, we can force the check to fail for the first iteration to ensure progress. We did this in d3a55d7d9 "x86/mm: Ensure useful progress in alloc_l2_table()" already. After this change I cannot see the hang caused by continuation logic anymore. Signed-off-by: Wei Liu Reviewed-by: Andrew Cooper Acked-by: Keir Fraser --- xen/common/memory.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xen/common/memory.c b/xen/common/memory.c index 5a0efd57e2..9d0d32e326 100644 --- a/xen/common/memory.c +++ b/xen/common/memory.c @@ -268,7 +268,7 @@ static void decrease_reservation(struct memop_args *a) for ( i = a->nr_done; i < a->nr_extents; i++ ) { - if ( hypercall_preempt_check() ) + if ( hypercall_preempt_check() && i != a->nr_done ) { a->preempted = 1; goto out; -- 2.30.2